// 路由守卫配置文件
import { getUserInfoHandle } from './user'

// 白名单页面，不需要登录即可访问
const whiteList = ['/pages/login/login', '/pages/accountLogin/accountLogin', '/pages/codeLogin/codeLogin']

// 路由守卫函数
const setupRouteGuard = (app) => {
  // 在Vue 3的UniApp中，使用uni.addInterceptor来实现路由守卫
  uni.addInterceptor('navigateTo', {
    async invoke(args) {
      await checkTokenValid(args.url)
    }
  })

  uni.addInterceptor('switchTab', {
    async invoke(args) {
      await checkTokenValid(args.url)
    }
  })

  uni.addInterceptor('redirectTo', {
    async invoke(args) {
      await checkTokenValid(args.url)
    }
  })

  // 检查token有效性
  const checkTokenValid = async (url) => {
    // 如果是白名单页面，则直接通过
    if (whiteList.some(path => url.includes(path))) {
      return true
    }

    // 检查是否存在token
     const token = uni.getStorageSync('token');
    if (!token) {
      // 不存在token，跳转到登录页
      uni.redirectTo({
        url: '/pages/login/login'
      })
      return false
    }

    try {
      // 调用后端接口验证token
      const res = await getUserInfoHandle({ token })
      if (res.code !== 200) {
        // token无效，清除token并跳转到登录页
        uni.removeStorage({
          key: 'token'
        });
        uni.removeStorage({
          key: 'userinfo'
        });
        uni.redirectTo({
          url: '/pages/login/login'
        })
        return false
      }
      // token有效，允许访问
      return true
    } catch (error) {
      console.error('验证token失败:', error)
      // 网络错误等情况，也跳转到登录页
      uni.removeStorage({
        key: 'token'
      });
      uni.removeStorage({
        key: 'userinfo'
      });
      uni.redirectTo({
        url: '/pages/login/login'
      })
      return false
    }
  }
}

export default setupRouteGuard